ZGlmZiAtLWdpdCBhL2JvYXJkL2VORVQvTWFrZWZpbGUgYi9ib2FyZC9lTkVUL01ha2VmaWxlCmluZGV4IDQ4MTNiNGIuLmJmNTczNmEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VORVQvTWFrZWZpbGUKKysrIGIvYm9hcmQvZU5FVC9NYWtlZmlsZQpAQCAtMzEsMTIgKzMxLDEyIEBACiAKIExJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotQ09CSlMJOj0gZU5FVC5vCi1TT0JKUwk6PSBlTkVUX3N0YXJ0MTYubyBlTkVUX3N0YXJ0Lm8KK0NPQkpTLXkJKz0gZU5FVC5vCitTT0JKUy15CSs9IGVORVRfc3RhcnQxNi5vCitTT0JKUy15CSs9IGVORVRfc3RhcnQubwogCi1TUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCi1PQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKLVNPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKK1NSQ1MJOj0gJChTT0JKUy15Oi5vPS5TKSAkKENPQkpTLXk6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTLXkpICQoQ09CSlMteSkpCiAKICQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCiAJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpICQoU09CSlMpCmRpZmYgLS1naXQgYS9ib2FyZC9zYzUyMF9jZHAvTWFrZWZpbGUgYi9ib2FyZC9zYzUyMF9jZHAvTWFrZWZpbGUKaW5kZXggMGQyODAwZC4uNzk0NGEwMSAxMDA2NDQKLS0tIGEvYm9hcmQvc2M1MjBfY2RwL01ha2VmaWxlCisrKyBiL2JvYXJkL3NjNTIwX2NkcC9NYWtlZmlsZQpAQCAtMjgsMTIgKzI4LDE0IEBACiAKIExJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotQ09CSlMJOj0gc2M1MjBfY2RwLm8gZmxhc2gubwotU09CSlMJOj0gc2M1MjBfY2RwX2FzbS5vIHNjNTIwX2NkcF9hc20xNi5vCitDT0JKUy15CSs9IHNjNTIwX2NkcC5vCitDT0JKUy15CSs9IGZsYXNoLm8KK0NPQkpTLSQoQ09ORklHX1BDSSkgKz0gc2M1MjBfY2RwX3BjaS5vCitTT0JKUy15CSs9IHNjNTIwX2NkcF9hc20ubworU09CSlMteQkrPSBzYzUyMF9jZHBfYXNtMTYubwogCi1TUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCi1PQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKLVNPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKK1NSQ1MJOj0gJChTT0JKUy15Oi5vPS5TKSAkKENPQkpTLXk6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTLXkpICQoQ09CSlMteSkpCiAKICQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCiAJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpICQoU09CSlMpCmRpZmYgLS1naXQgYS9ib2FyZC9zYzUyMF9jZHAvc2M1MjBfY2RwLmMgYi9ib2FyZC9zYzUyMF9jZHAvc2M1MjBfY2RwLmMKaW5kZXggOTMxMmY0Zi4uNGM0NGIyNCAxMDA2NDQKLS0tIGEvYm9hcmQvc2M1MjBfY2RwL3NjNTIwX2NkcC5jCisrKyBiL2JvYXJkL3NjNTIwX2NkcC9zYzUyMF9jZHAuYwpAQCAtMjMsMTEgKzIzLDggQEAKICAqLwogCiAjaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8cGNpLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BjaS5oPgogI2luY2x1ZGUgPGFzbS9pYy9zYzUyMC5oPgotI2luY2x1ZGUgPGFzbS9pYy9wY2kuaD4KICNpbmNsdWRlIDxhbGk1MTJ4Lmg+CiAjaW5jbHVkZSA8c3BpLmg+CiAjaW5jbHVkZSA8bmV0ZGV2Lmg+CkBAIC0xMTQsODcgKzExMSw2IEBACiAJc2M1MjBfbW1jci0+ZWNjbWFwID0gMHgxMDA7CQkJCS8qIE1hcCBTRFJBTSBFQ0MgZmFpbHVyZSBJTlQgdG8gTk1JICovCiB9CiAKLSNpZmRlZiBDT05GSUdfUENJCi0vKiBQQ0kgc3R1ZmYgKi8KLXN0YXRpYyB2b2lkIHBjaV9zYzUyMF9jZHBfZml4dXBfaXJxKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgcGNpX2Rldl90IGRldikKLXsKLQkvKiBhIGNvbmZpZ3VyYWJsZSBsaXN0cyBvZiBpcnFzIHRvIHN0ZWFsCi0JICogd2hlbiB3ZSBuZWVkIG9uZSAoYSBib2FyZCB3aXRoIG1vcmUgcGNpIGludGVycnVwdCBwaW5zCi0JICogd291bGQgdXNlIGEgbGFyZ2VyIHRhYmxlICovCi0Jc3RhdGljIGludCBpcnFfbGlzdFtdID0gewotCQlDT05GSUdfU1lTX0ZJUlNUX1BDSV9JUlEsCi0JCUNPTkZJR19TWVNfU0VDT05EX1BDSV9JUlEsCi0JCUNPTkZJR19TWVNfVEhJUkRfUENJX0lSUSwKLQkJQ09ORklHX1NZU19GT1JUSF9QQ0lfSVJRCi0JfTsKLQlzdGF0aWMgaW50IG5leHRfaXJxX2luZGV4PTA7Ci0KLQl1Y2hhciB0bXBfcGluOwotCWludCBwaW47Ci0KLQlwY2lfaG9zZV9yZWFkX2NvbmZpZ19ieXRlKGhvc2UsIGRldiwgUENJX0lOVEVSUlVQVF9QSU4sICZ0bXBfcGluKTsKLQlwaW4gPSB0bXBfcGluOwotCi0JcGluLT0xOyAvKiBwY2kgY29uZmlnIHNwYWNlIHVzZSAxLWJhc2VkIG51bWJlcmluZyAqLwotCWlmICgtMSA9PSBwaW4pIHsKLQkJcmV0dXJuOyAvKiBkZXZpY2UgdXNlIG5vIGlycSAqLwotCX0KLQotCi0JLyogbWFwIGRldmljZSBudW1iZXIgKyAgcGluIHRvIGEgcGluIG9uIHRoZSBzYzUyMCAqLwotCXN3aXRjaCAoUENJX0RFVihkZXYpKSB7Ci0JY2FzZSAyMDoKLQkJcGluKz1TQzUyMF9QQ0lfSU5UQTsKLQkJYnJlYWs7Ci0KLQljYXNlIDE5OgotCQlwaW4rPVNDNTIwX1BDSV9JTlRCOwotCQlicmVhazsKLQotCWNhc2UgMTg6Ci0JCXBpbis9U0M1MjBfUENJX0lOVEM7Ci0JCWJyZWFrOwotCi0JY2FzZSAxNzoKLQkJcGluKz1TQzUyMF9QQ0lfSU5URDsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm47Ci0JfQotCi0JcGluJj0zOyAvKiB3cmFwIGFyb3VuZCAqLwotCi0JaWYgKHNjNTIwX3BjaV9pbnRzW3Bpbl0gPT0gLTEpIHsKLQkJLyogcmUtcm91dGUgb25lIGludGVycnVwdCBmb3IgdXMgKi8KLQkJaWYgKG5leHRfaXJxX2luZGV4ID4gMykgewotCQkJcmV0dXJuOwotCQl9Ci0JCWlmIChwY2lfc2M1MjBfc2V0X2lycShwaW4sIGlycV9saXN0W25leHRfaXJxX2luZGV4XSkpIHsKLQkJCXJldHVybjsKLQkJfQotCQluZXh0X2lycV9pbmRleCsrOwotCX0KLQotCi0JaWYgKC0xICE9IHNjNTIwX3BjaV9pbnRzW3Bpbl0pIHsKLQkJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX2J5dGUoaG9zZSwgZGV2LCBQQ0lfSU5URVJSVVBUX0xJTkUsCi0JCQkJCSAgIHNjNTIwX3BjaV9pbnRzW3Bpbl0pOwotCX0KLQlQUklOVEYoImZpeHVwX2lycTogZGV2aWNlICVkIHBpbiAlYyBpcnEgJWRcbiIsCi0JICAgICAgIFBDSV9ERVYoZGV2KSwgJ0EnICsgcGluLCBzYzUyMF9wY2lfaW50c1twaW5dKTsKLX0KLQotc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBzYzUyMF9jZHBfaG9zZSA9IHsKLQlmaXh1cF9pcnE6IHBjaV9zYzUyMF9jZHBfZml4dXBfaXJxLAotfTsKLQotdm9pZCBwY2lfaW5pdF9ib2FyZCh2b2lkKQotewotCXBjaV9zYzUyMF9pbml0KCZzYzUyMF9jZHBfaG9zZSk7Ci19Ci0jZW5kaWYKLQogc3RhdGljIHZvaWQgc2lsZW5jZV91YXJ0KGludCBwb3J0KQogewogCW91dGIoMCwgcG9ydCsxKTsKQEAgLTMyMiwxNjEgKzIzOCw2IEBACiAgKi8KIAogLyoKLSAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG1hcCBhIGNodW5rIG9mIHNpemUgYnl0ZXMKLSAqIG9mIHRoZSBzeXN0ZW0gYWRkcmVzcyBzcGFjZSB0byB0aGUgSVNBIGJ1cwotICoKLSAqIFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgbWVtb3J5IGFkZHJlc3MKLSAqIGFzIHNlZW4gYnkgdGhlIGhvc3QgKHdoaWNoIG1heSB2ZXJ5IHdpbGwgYmUgdGhlCi0gKiBzYW1lIGFzIHRoZSBidXMgYWRkcmVzcykKLSAqLwotdTMyIGlzYV9tYXBfcm9tKHUzMiBidXNfYWRkciwgaW50IHNpemUpCi17Ci0JdTMyIHBhcjsKLQotCVBSSU5URigiaXNhX21hcF9yb20gYXNrZWQgdG8gbWFwICVkIGJ5dGVzIGF0ICV4XG4iLAotCSAgICAgICBzaXplLCBidXNfYWRkcik7Ci0KLQlwYXIgPSBzaXplOwotCWlmIChwYXIgPCAweDgwMDAwKSB7Ci0JCXBhciA9IDB4ODAwMDA7Ci0JfQotCXBhciA+Pj0gMTI7Ci0JcGFyLS07Ci0JcGFyJj0weDdmOwotCXBhciA8PD0gMTg7Ci0JcGFyIHw9IChidXNfYWRkcj4+MTIpOwotCXBhciB8PSAweDUwMDAwMDAwOwotCi0JUFJJTlRGICgic2V0dGluZyBQQVIxMSB0byAleFxuIiwgcGFyKTsKLQotCS8qIE1hcCByb20gMHgxMDAwMCB3aXRoIFBBUjEgKi8KLQlzYzUyMF9tbWNyLT5wYXJbMTFdID0gcGFyOwotCi0JcmV0dXJuIGJ1c19hZGRyOwotfQotCi0vKgotICogdGhpcyBmdW5jdGlvbiByZW1vdmVkIGFueSBtYXBwaW5nIGNyZWF0ZWQKLSAqIHdpdGggcGNpX2dldF9yb21fd2luZG93KCkKLSAqLwotdm9pZCBpc2FfdW5tYXBfcm9tKHUzMiBhZGRyKQotewotCVBSSU5URigiaXNhX3VubWFwX3JvbSBhc2tlZCB0byB1bm1hcCAleCIsIGFkZHIpOwotCWlmICgoYWRkcj4+MTIpID09IChzYzUyMF9tbWNyLT5wYXJbMTFdICYgMHgzZmZmZikpIHsKLQkJc2M1MjBfbW1jci0+cGFyWzExXSA9IDA7Ci0JCVBSSU5URigiIGRvbmVcbiIpOwotCQlyZXR1cm47Ci0JfQotCVBSSU5URigiIG5vdCBvdXJzXG4iKTsKLX0KLQotI2lmZGVmIENPTkZJR19QQ0kKLSNkZWZpbmUgUENJX1JPTV9URU1QX1NQQUNFIDB4MTAwMDAKLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBtYXAgYSBjaHVuayBvZiBzaXplIGJ5dGVzCi0gKiBvZiB0aGUgc3lzdGVtIGFkZHJlc3Mgc3BhY2UgdG8gdGhlIFBDSSBidXMsCi0gKiBzdWl0YWJsZSB0byBtYXAgUENJIFJPTVMgKGJ1cyBhZGRyZXNzIDwgMTZNKQotICogdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBob3N0IG1lbW9yeSBhZGRyZXNzCi0gKiB3aGljaCBzaG91bGQgYmUgY29udmVydGVkIGludG8gYSBidXMgYWRkcmVzcwotICogYmVmb3JlIHVzZWQgdG8gY29uZmlndXJlIHRoZSBQQ0kgcm9tIGFkZHJlc3MKLSAqIGRlY29kZXIKLSAqLwotdTMyIHBjaV9nZXRfcm9tX3dpbmRvdyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIGludCBzaXplKQotewotCXUzMiBwYXI7Ci0KLQlwYXIgPSBzaXplOwotCWlmIChwYXIgPCAweDgwMDAwKSB7Ci0JCXBhciA9IDB4ODAwMDA7Ci0JfQotCXBhciA+Pj0gMTY7Ci0JcGFyLS07Ci0JcGFyJj0weDdmZjsKLQlwYXIgPDw9IDE0OwotCXBhciB8PSAoUENJX1JPTV9URU1QX1NQQUNFPj4xNik7Ci0JcGFyIHw9IDB4NzIwMDAwMDA7Ci0KLQlQUklOVEYgKCJzZXR0aW5nIFBBUjEgdG8gJXhcbiIsIHBhcik7Ci0KLQkvKiBNYXAgcm9tIDB4MTAwMDAgd2l0aCBQQVIxICovCi0Jc2M1MjBfbW1jci0+cGFyWzFdID0gcGFyOwotCi0JcmV0dXJuIFBDSV9ST01fVEVNUF9TUEFDRTsKLX0KLQotLyoKLSAqIHRoaXMgZnVuY3Rpb24gcmVtb3ZlZCBhbnkgbWFwcGluZyBjcmVhdGVkCi0gKiB3aXRoIHBjaV9nZXRfcm9tX3dpbmRvdygpCi0gKi8KLXZvaWQgcGNpX3JlbW92ZV9yb21fd2luZG93KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgdTMyIGFkZHIpCi17Ci0JUFJJTlRGKCJwY2lfcmVtb3ZlX3JvbV93aW5kb3c6ICV4IiwgYWRkcik7Ci0JaWYgKGFkZHIgPT0gUENJX1JPTV9URU1QX1NQQUNFKSB7Ci0JCXNjNTIwX21tY3ItPnBhclsxXSA9IDA7Ci0JCVBSSU5URigiIGRvbmVcbiIpOwotCQlyZXR1cm47Ci0JfQotCVBSSU5URigiIG5vdCBvdXJzXG4iKTsKLQotfQotCi0vKgotICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gb3JkZXIgdG8gcHJvdmlkZSBhY2NlcyB0byB0aGUKLSAqIGxlZ2FjeSB2aWRlbyBJL08gcG9ydHMgb24gdGhlIFBDSSBidXMuCi0gKiBBZnRlciB0aGlzIGZ1bmN0aW9uIGFjY2Vzc2VzIHRvIEkvTyBwb3J0cyAweDNiMC0weDNiYiBhbmQKLSAqIDB4M2MwLTB4M2RmIHNodWxkIHJlc3VsdCBpbiB0cmFuc2FjdGlvbnMgb24gdGhlIFBDSSBidXMuCi0gKgotICovCi1pbnQgcGNpX2VuYWJsZV9sZWdhY3lfdmlkZW9fcG9ydHMoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQotewotCS8qIE1hcCB2aWRlbyBtZW1vcnkgdG8gMHhhMDAwMCovCi0Jc2M1MjBfbW1jci0+cGFyWzBdID0gMHg3MjAwNDAwYTsKLQotCS8qIGZvcndhcmQgYWxsIEkvTyBhY2Nlc3NlcyB0byBQQ0kgKi8KLQlzYzUyMF9tbWNyLT5hZGRkZWNjdGwgPSBzYzUyMF9tbWNyLT5hZGRkZWNjdGwgfCBJT19IT0xFX0RFU1RfUENJOwotCi0KLQkvKiBzbyB3ZSBtYXAgYXdheSBhbGwgaW8gcG9ydHMgdG8gcGNpIChvbmx5IHdheSB0byBhY2Nlc3MgcGNpIGlvCi0JICogYmVsb3cgMHg0MDAuIEJ1dCB0aGVuIHdlIGhhdmUgdG8gbWFwIGJhY2sgdGhlIHBvcnRpb25zIHRoYXQgd2UgZG9udAotCSAqIHVzZSBzbyB0aGF0IHRoZSBnZW5lcmF0ZSBjeWNsZXMgb24gdGhlIEdQSU8gYnVzIHdoZXJlIHRoZSBzaW8gYW5kCi0JICogSVNBIHNsb3RzIGFyZSBjb25uZWN0ZWQsIHRoaXMgcmVxdXJlIHRoZSB1c2Ugb2Ygc2V2ZXJhbCBQQVIgcmVnaXN0ZXJzCi0JICovCi0KLQkvKiBicmluZyAweDEwMCAtIDB4MWVmIGJhY2sgdG8gSVNBIHVzaW5nIFBBUjUgKi8KLQlzYzUyMF9tbWNyLT5wYXJbNV0gPSAweDMwZWYwMTAwOwotCi0JLyogSURFIHVzZSAxZjAtMWY3ICovCi0KLQkvKiBicmluZyAweDFmOCAtIDB4MmY3IGJhY2sgdG8gSVNBIHVzaW5nIFBBUjYgKi8KLQlzYzUyMF9tbWNyLT5wYXJbNl0gPSAweDMwZmYwMWY4OwotCi0JLyogY29tMiB1c2UgMmY4LTJmZiAqLwotCi0JLyogYnJpbmcgMHgzMDAgLSAweDNhZiBiYWNrIHRvIElTQSB1c2luZyBQQVI3ICovCi0Jc2M1MjBfbW1jci0+cGFyWzddID0gMHgzMGFmMDMwMDsKLQotCS8qIHZnYSB1c2UgM2IwLTNiYiAqLwotCi0JLyogYnJpbmcgMHgzYmMgLSAweDNiZiBiYWNrIHRvIElTQSB1c2luZyBQQVI4ICovCi0Jc2M1MjBfbW1jci0+cGFyWzhdID0gMHgzMDAzMDNiYzsKLQotCS8qIHZnYSB1c2UgM2MwLTNkZiAqLwotCi0JLyogYnJpbmcgMHgzZTAgLSAweDNmNSBiYWNrIHRvIElTQSB1c2luZyBQQVI5ICovCi0Jc2M1MjBfbW1jci0+cGFyWzldID0gMHgzMDE1MDNlMDsKLQotCS8qIGlkZSB1c2UgM2Y2ICovCi0KLQkvKiBicmluZyAweDNmNyAgYmFjayB0byBJU0EgdXNpbmcgUEFSMTAgKi8KLQlzYzUyMF9tbWNyLT5wYXJbMTBdID0gMHgzMDAwMDNmNzsKLQotCS8qIGNvbTEgdXNlIDNmOC0zZmYgKi8KLQotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLS8qCiAgKiBNaXNjZWxhbmVvdXMgcGxhdGZvcm0gZGVwZW5kZW50IGluaXRpYWxpc2F0aW9ucwogICovCiAKZGlmZiAtLWdpdCBhL2JvYXJkL3NjNTIwX2NkcC9zYzUyMF9jZHBfcGNpLmMgYi9ib2FyZC9zYzUyMF9jZHAvc2M1MjBfY2RwX3BjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYjc5ODgKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9zYzUyMF9jZHAvc2M1MjBfY2RwX3BjaS5jCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogRGFuaWVsIEVuZ3N0cvZtLCBPbWljcm9uIENldGkgQUIgPGRhbmllbEBvbWljcm9uLnNlPi4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8cGNpLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3BjaS5oPgorI2luY2x1ZGUgPGFzbS9pYy9zYzUyMC5oPgorI2luY2x1ZGUgPGFzbS9pYy9wY2kuaD4KKworREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKyN1bmRlZiBTQzUyMF9DRFBfREVCVUcKKworI2lmZGVmCVNDNTIwX0NEUF9ERUJVRworI2RlZmluZQlQUklOVEYoZm10LGFyZ3MuLi4pCXByaW50ZiAoZm10ICwjI2FyZ3MpCisjZWxzZQorI2RlZmluZSBQUklOVEYoZm10LGFyZ3MuLi4pCisjZW5kaWYKKworc3RhdGljIHZvaWQgcGNpX3NjNTIwX2NkcF9maXh1cF9pcnEoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCBwY2lfZGV2X3QgZGV2KQoreworCS8qIGEgY29uZmlndXJhYmxlIGxpc3RzIG9mIGlycXMgdG8gc3RlYWwKKwkgKiB3aGVuIHdlIG5lZWQgb25lIChhIGJvYXJkIHdpdGggbW9yZSBwY2kgaW50ZXJydXB0IHBpbnMKKwkgKiB3b3VsZCB1c2UgYSBsYXJnZXIgdGFibGUgKi8KKwlzdGF0aWMgaW50IGlycV9saXN0W10gPSB7CisJCUNPTkZJR19TWVNfRklSU1RfUENJX0lSUSwKKwkJQ09ORklHX1NZU19TRUNPTkRfUENJX0lSUSwKKwkJQ09ORklHX1NZU19USElSRF9QQ0lfSVJRLAorCQlDT05GSUdfU1lTX0ZPUlRIX1BDSV9JUlEKKwl9OworCXN0YXRpYyBpbnQgbmV4dF9pcnFfaW5kZXg9MDsKKworCXVjaGFyIHRtcF9waW47CisJaW50IHBpbjsKKworCXBjaV9ob3NlX3JlYWRfY29uZmlnX2J5dGUoaG9zZSwgZGV2LCBQQ0lfSU5URVJSVVBUX1BJTiwgJnRtcF9waW4pOworCXBpbiA9IHRtcF9waW47CisKKwlwaW4tPTE7IC8qIHBjaSBjb25maWcgc3BhY2UgdXNlIDEtYmFzZWQgbnVtYmVyaW5nICovCisJaWYgKC0xID09IHBpbikgeworCQlyZXR1cm47IC8qIGRldmljZSB1c2Ugbm8gaXJxICovCisJfQorCisKKwkvKiBtYXAgZGV2aWNlIG51bWJlciArICBwaW4gdG8gYSBwaW4gb24gdGhlIHNjNTIwICovCisJc3dpdGNoIChQQ0lfREVWKGRldikpIHsKKwljYXNlIDIwOgorCQlwaW4rPVNDNTIwX1BDSV9JTlRBOworCQlicmVhazsKKworCWNhc2UgMTk6CisJCXBpbis9U0M1MjBfUENJX0lOVEI7CisJCWJyZWFrOworCisJY2FzZSAxODoKKwkJcGluKz1TQzUyMF9QQ0lfSU5UQzsKKwkJYnJlYWs7CisKKwljYXNlIDE3OgorCQlwaW4rPVNDNTIwX1BDSV9JTlREOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisKKwlwaW4mPTM7IC8qIHdyYXAgYXJvdW5kICovCisKKwlpZiAoc2M1MjBfcGNpX2ludHNbcGluXSA9PSAtMSkgeworCQkvKiByZS1yb3V0ZSBvbmUgaW50ZXJydXB0IGZvciB1cyAqLworCQlpZiAobmV4dF9pcnFfaW5kZXggPiAzKSB7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKHBjaV9zYzUyMF9zZXRfaXJxKHBpbiwgaXJxX2xpc3RbbmV4dF9pcnFfaW5kZXhdKSkgeworCQkJcmV0dXJuOworCQl9CisJCW5leHRfaXJxX2luZGV4Kys7CisJfQorCisKKwlpZiAoLTEgIT0gc2M1MjBfcGNpX2ludHNbcGluXSkgeworCQlwY2lfaG9zZV93cml0ZV9jb25maWdfYnl0ZShob3NlLCBkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwKKwkJCQkJICAgc2M1MjBfcGNpX2ludHNbcGluXSk7CisJfQorCVBSSU5URigiZml4dXBfaXJxOiBkZXZpY2UgJWQgcGluICVjIGlycSAlZFxuIiwKKwkgICAgICAgUENJX0RFVihkZXYpLCAnQScgKyBwaW4sIHNjNTIwX3BjaV9pbnRzW3Bpbl0pOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9jb250cm9sbGVyIHNjNTIwX2NkcF9ob3NlID0geworCWZpeHVwX2lycTogcGNpX3NjNTIwX2NkcF9maXh1cF9pcnEsCit9OworCit2b2lkIHBjaV9pbml0X2JvYXJkKHZvaWQpCit7CisJcGNpX3NjNTIwX2luaXQoJnNjNTIwX2NkcF9ob3NlKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG1hcCBhIGNodW5rIG9mIHNpemUgYnl0ZXMKKyAqIG9mIHRoZSBzeXN0ZW0gYWRkcmVzcyBzcGFjZSB0byB0aGUgSVNBIGJ1cworICoKKyAqIFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgbWVtb3J5IGFkZHJlc3MKKyAqIGFzIHNlZW4gYnkgdGhlIGhvc3QgKHdoaWNoIG1heSB2ZXJ5IHdpbGwgYmUgdGhlCisgKiBzYW1lIGFzIHRoZSBidXMgYWRkcmVzcykKKyAqLwordTMyIGlzYV9tYXBfcm9tKHUzMiBidXNfYWRkciwgaW50IHNpemUpCit7CisJdTMyIHBhcjsKKworCVBSSU5URigiaXNhX21hcF9yb20gYXNrZWQgdG8gbWFwICVkIGJ5dGVzIGF0ICV4XG4iLAorCSAgICAgICBzaXplLCBidXNfYWRkcik7CisKKwlwYXIgPSBzaXplOworCWlmIChwYXIgPCAweDgwMDAwKSB7CisJCXBhciA9IDB4ODAwMDA7CisJfQorCXBhciA+Pj0gMTI7CisJcGFyLS07CisJcGFyJj0weDdmOworCXBhciA8PD0gMTg7CisJcGFyIHw9IChidXNfYWRkcj4+MTIpOworCXBhciB8PSAweDUwMDAwMDAwOworCisJUFJJTlRGICgic2V0dGluZyBQQVIxMSB0byAleFxuIiwgcGFyKTsKKworCS8qIE1hcCByb20gMHgxMDAwMCB3aXRoIFBBUjEgKi8KKwlzYzUyMF9tbWNyLT5wYXJbMTFdID0gcGFyOworCisJcmV0dXJuIGJ1c19hZGRyOworfQorCisvKgorICogdGhpcyBmdW5jdGlvbiByZW1vdmVkIGFueSBtYXBwaW5nIGNyZWF0ZWQKKyAqIHdpdGggcGNpX2dldF9yb21fd2luZG93KCkKKyAqLwordm9pZCBpc2FfdW5tYXBfcm9tKHUzMiBhZGRyKQoreworCVBSSU5URigiaXNhX3VubWFwX3JvbSBhc2tlZCB0byB1bm1hcCAleCIsIGFkZHIpOworCWlmICgoYWRkcj4+MTIpID09IChzYzUyMF9tbWNyLT5wYXJbMTFdICYgMHgzZmZmZikpIHsKKwkJc2M1MjBfbW1jci0+cGFyWzExXSA9IDA7CisJCVBSSU5URigiIGRvbmVcbiIpOworCQlyZXR1cm47CisJfQorCVBSSU5URigiIG5vdCBvdXJzXG4iKTsKK30KKworI2RlZmluZSBQQ0lfUk9NX1RFTVBfU1BBQ0UgMHgxMDAwMAorLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG1hcCBhIGNodW5rIG9mIHNpemUgYnl0ZXMKKyAqIG9mIHRoZSBzeXN0ZW0gYWRkcmVzcyBzcGFjZSB0byB0aGUgUENJIGJ1cywKKyAqIHN1aXRhYmxlIHRvIG1hcCBQQ0kgUk9NUyAoYnVzIGFkZHJlc3MgPCAxNk0pCisgKiB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIGhvc3QgbWVtb3J5IGFkZHJlc3MKKyAqIHdoaWNoIHNob3VsZCBiZSBjb252ZXJ0ZWQgaW50byBhIGJ1cyBhZGRyZXNzCisgKiBiZWZvcmUgdXNlZCB0byBjb25maWd1cmUgdGhlIFBDSSByb20gYWRkcmVzcworICogZGVjb2RlcgorICovCit1MzIgcGNpX2dldF9yb21fd2luZG93KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgaW50IHNpemUpCit7CisJdTMyIHBhcjsKKworCXBhciA9IHNpemU7CisJaWYgKHBhciA8IDB4ODAwMDApIHsKKwkJcGFyID0gMHg4MDAwMDsKKwl9CisJcGFyID4+PSAxNjsKKwlwYXItLTsKKwlwYXImPTB4N2ZmOworCXBhciA8PD0gMTQ7CisJcGFyIHw9IChQQ0lfUk9NX1RFTVBfU1BBQ0U+PjE2KTsKKwlwYXIgfD0gMHg3MjAwMDAwMDsKKworCVBSSU5URiAoInNldHRpbmcgUEFSMSB0byAleFxuIiwgcGFyKTsKKworCS8qIE1hcCByb20gMHgxMDAwMCB3aXRoIFBBUjEgKi8KKwlzYzUyMF9tbWNyLT5wYXJbMV0gPSBwYXI7CisKKwlyZXR1cm4gUENJX1JPTV9URU1QX1NQQUNFOworfQorCisvKgorICogdGhpcyBmdW5jdGlvbiByZW1vdmVkIGFueSBtYXBwaW5nIGNyZWF0ZWQKKyAqIHdpdGggcGNpX2dldF9yb21fd2luZG93KCkKKyAqLwordm9pZCBwY2lfcmVtb3ZlX3JvbV93aW5kb3coc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCB1MzIgYWRkcikKK3sKKwlQUklOVEYoInBjaV9yZW1vdmVfcm9tX3dpbmRvdzogJXgiLCBhZGRyKTsKKwlpZiAoYWRkciA9PSBQQ0lfUk9NX1RFTVBfU1BBQ0UpIHsKKwkJc2M1MjBfbW1jci0+cGFyWzFdID0gMDsKKwkJUFJJTlRGKCIgZG9uZVxuIik7CisJCXJldHVybjsKKwl9CisJUFJJTlRGKCIgbm90IG91cnNcbiIpOworCit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBvcmRlciB0byBwcm92aWRlIGFjY2VzIHRvIHRoZQorICogbGVnYWN5IHZpZGVvIEkvTyBwb3J0cyBvbiB0aGUgUENJIGJ1cy4KKyAqIEFmdGVyIHRoaXMgZnVuY3Rpb24gYWNjZXNzZXMgdG8gSS9PIHBvcnRzIDB4M2IwLTB4M2JiIGFuZAorICogMHgzYzAtMHgzZGYgc2h1bGQgcmVzdWx0IGluIHRyYW5zYWN0aW9ucyBvbiB0aGUgUENJIGJ1cy4KKyAqCisgKi8KK2ludCBwY2lfZW5hYmxlX2xlZ2FjeV92aWRlb19wb3J0cyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCit7CisJLyogTWFwIHZpZGVvIG1lbW9yeSB0byAweGEwMDAwKi8KKwlzYzUyMF9tbWNyLT5wYXJbMF0gPSAweDcyMDA0MDBhOworCisJLyogZm9yd2FyZCBhbGwgSS9PIGFjY2Vzc2VzIHRvIFBDSSAqLworCXNjNTIwX21tY3ItPmFkZGRlY2N0bCA9IHNjNTIwX21tY3ItPmFkZGRlY2N0bCB8IElPX0hPTEVfREVTVF9QQ0k7CisKKworCS8qIHNvIHdlIG1hcCBhd2F5IGFsbCBpbyBwb3J0cyB0byBwY2kgKG9ubHkgd2F5IHRvIGFjY2VzcyBwY2kgaW8KKwkgKiBiZWxvdyAweDQwMC4gQnV0IHRoZW4gd2UgaGF2ZSB0byBtYXAgYmFjayB0aGUgcG9ydGlvbnMgdGhhdCB3ZSBkb250CisJICogdXNlIHNvIHRoYXQgdGhlIGdlbmVyYXRlIGN5Y2xlcyBvbiB0aGUgR1BJTyBidXMgd2hlcmUgdGhlIHNpbyBhbmQKKwkgKiBJU0Egc2xvdHMgYXJlIGNvbm5lY3RlZCwgdGhpcyByZXF1cmUgdGhlIHVzZSBvZiBzZXZlcmFsIFBBUiByZWdpc3RlcnMKKwkgKi8KKworCS8qIGJyaW5nIDB4MTAwIC0gMHgxZWYgYmFjayB0byBJU0EgdXNpbmcgUEFSNSAqLworCXNjNTIwX21tY3ItPnBhcls1XSA9IDB4MzBlZjAxMDA7CisKKwkvKiBJREUgdXNlIDFmMC0xZjcgKi8KKworCS8qIGJyaW5nIDB4MWY4IC0gMHgyZjcgYmFjayB0byBJU0EgdXNpbmcgUEFSNiAqLworCXNjNTIwX21tY3ItPnBhcls2XSA9IDB4MzBmZjAxZjg7CisKKwkvKiBjb20yIHVzZSAyZjgtMmZmICovCisKKwkvKiBicmluZyAweDMwMCAtIDB4M2FmIGJhY2sgdG8gSVNBIHVzaW5nIFBBUjcgKi8KKwlzYzUyMF9tbWNyLT5wYXJbN10gPSAweDMwYWYwMzAwOworCisJLyogdmdhIHVzZSAzYjAtM2JiICovCisKKwkvKiBicmluZyAweDNiYyAtIDB4M2JmIGJhY2sgdG8gSVNBIHVzaW5nIFBBUjggKi8KKwlzYzUyMF9tbWNyLT5wYXJbOF0gPSAweDMwMDMwM2JjOworCisJLyogdmdhIHVzZSAzYzAtM2RmICovCisKKwkvKiBicmluZyAweDNlMCAtIDB4M2Y1IGJhY2sgdG8gSVNBIHVzaW5nIFBBUjkgKi8KKwlzYzUyMF9tbWNyLT5wYXJbOV0gPSAweDMwMTUwM2UwOworCisJLyogaWRlIHVzZSAzZjYgKi8KKworCS8qIGJyaW5nIDB4M2Y3ICBiYWNrIHRvIElTQSB1c2luZyBQQVIxMCAqLworCXNjNTIwX21tY3ItPnBhclsxMF0gPSAweDMwMDAwM2Y3OworCisJLyogY29tMSB1c2UgM2Y4LTNmZiAqLworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9zYzUyMF9zcHVuay9NYWtlZmlsZSBiL2JvYXJkL3NjNTIwX3NwdW5rL01ha2VmaWxlCmluZGV4IGUwNDE3MmUuLjA2ZmEyZjMgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NjNTIwX3NwdW5rL01ha2VmaWxlCisrKyBiL2JvYXJkL3NjNTIwX3NwdW5rL01ha2VmaWxlCkBAIC0yOCwxMiArMjgsMTQgQEAKIAogTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1DT0JKUwk6PSBzYzUyMF9zcHVuay5vIGZsYXNoLm8KLVNPQkpTCTo9IHNjNTIwX3NwdW5rX2FzbS5vIHNjNTIwX3NwdW5rX2FzbTE2Lm8KK0NPQkpTLXkJKz0gc2M1MjBfc3B1bmsubworQ09CSlMteQkrPSBmbGFzaC5vCitDT0JKUy0kKENPTkZJR19QQ0kpICs9IHNjNTIwX3NwdW5rX3BjaS5vCitTT0JKUy15CSs9IHNjNTIwX3NwdW5rX2FzbS5vCitTT0JKUy15CSs9IHNjNTIwX3NwdW5rX2FzbTE2Lm8KIAotU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQotT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCi1TT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCitTUkNTCTo9ICQoU09CSlMteToubz0uUykgJChDT0JKUy15Oi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUy15KSAkKENPQkpTLXkpKQogCiAkKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpTKSAkKFNPQkpTKQpkaWZmIC0tZ2l0IGEvYm9hcmQvc2M1MjBfc3B1bmsvc2M1MjBfc3B1bmsuYyBiL2JvYXJkL3NjNTIwX3NwdW5rL3NjNTIwX3NwdW5rLmMKaW5kZXggZGJiNWM0OC4uMDlmMTFiYiAxMDA2NDQKLS0tIGEvYm9hcmQvc2M1MjBfc3B1bmsvc2M1MjBfc3B1bmsuYworKysgYi9ib2FyZC9zYzUyMF9zcHVuay9zYzUyMF9zcHVuay5jCkBAIC0yMywxMyArMjMsMTAgQEAKICAqLwogCiAjaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8cGNpLmg+CiAjaW5jbHVkZSA8bmV0ZGV2Lmg+CiAjaW5jbHVkZSA8ZHMxNzIyLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BjaS5oPgogI2luY2x1ZGUgPGFzbS9pYy9zYzUyMC5oPgotI2luY2x1ZGUgPGFzbS9pYy9wY2kuaD4KICNpbmNsdWRlIDxhc20vaWMvc3NpLmg+CiAKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwpAQCAtOTgsMTU2ICs5NSw2IEBACiAKIH0KIAotCi0vKiBQQ0kgc3R1ZmYgKi8KLXN0YXRpYyB2b2lkIHBjaV9zYzUyMF9zcHVua19maXh1cF9pcnEoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCBwY2lfZGV2X3QgZGV2KQotewotCWludCB2ZXJzaW9uID0gc2M1MjBfbW1jci0+c3lzaW5mbzsKLQotCS8qIGEgY29uZmlndXJhYmxlIGxpc3RzIG9mIGlycXMgdG8gc3RlYWwKLQkgKiB3aGVuIHdlIG5lZWQgb25lIChhIGJvYXJkIHdpdGggbW9yZSBwY2kgaW50ZXJydXB0IHBpbnMKLQkgKiB3b3VsZCB1c2UgYSBsYXJnZXIgdGFibGUgKi8KLQlzdGF0aWMgaW50IGlycV9saXN0W10gPSB7Ci0JCUNPTkZJR19TWVNfRklSU1RfUENJX0lSUSwKLQkJQ09ORklHX1NZU19TRUNPTkRfUENJX0lSUSwKLQkJQ09ORklHX1NZU19USElSRF9QQ0lfSVJRLAotCQlDT05GSUdfU1lTX0ZPUlRIX1BDSV9JUlEKLQl9OwotCXN0YXRpYyBpbnQgbmV4dF9pcnFfaW5kZXg9MDsKLQotCXVjaGFyIHRtcF9waW47Ci0JaW50IHBpbjsKLQotCXBjaV9ob3NlX3JlYWRfY29uZmlnX2J5dGUoaG9zZSwgZGV2LCBQQ0lfSU5URVJSVVBUX1BJTiwgJnRtcF9waW4pOwotCXBpbiA9IHRtcF9waW47Ci0KLQlwaW4tPTE7IC8qIHBjaSBjb25maWcgc3BhY2UgdXNlIDEtYmFzZWQgbnVtYmVyaW5nICovCi0JaWYgKC0xID09IHBpbikgewotCQlyZXR1cm47IC8qIGRldmljZSB1c2Ugbm8gaXJxICovCi0JfQotCi0KLQkvKiBtYXAgZGV2aWNlIG51bWJlciArICBwaW4gdG8gYSBwaW4gb24gdGhlIHNjNTIwICovCi0Jc3dpdGNoIChQQ0lfREVWKGRldikpIHsKLQljYXNlIDY6ICAvKiBFVEgwICovCi0JCXBpbis9U0M1MjBfUENJX0lOVEE7Ci0JCWJyZWFrOwotCi0JY2FzZSA3OiAgLyogRVRIMSAqLwotCQlwaW4rPVNDNTIwX1BDSV9JTlRCOwotCQlicmVhazsKLQotCWNhc2UgODogIC8qIENyeXB0byAqLwotCQlwaW4rPVNDNTIwX1BDSV9JTlRDOwotCQlicmVhazsKLQotCWNhc2UgOTogLyogUE1DIHNsb3QgKi8KLQkJcGluKz1TQzUyMF9QQ0lfSU5URDsKLQkJYnJlYWs7Ci0KLQljYXNlIDEwOiAvKiBQQy1DYXJkICovCi0KLQkJaWYgKHZlcnNpb24gPCAxMCkgewotCQkJcGluKz1TQzUyMF9QQ0lfSU5URDsKLQkJfSBlbHNlIHsKLQkJCXBpbis9U0M1MjBfUENJX0lOVEM7Ci0JCX0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm47Ci0JfQotCi0JcGluJj0zOyAvKiB3cmFwIGFyb3VuZCAqLwotCi0JaWYgKHNjNTIwX3BjaV9pbnRzW3Bpbl0gPT0gLTEpIHsKLQkJLyogcmUtcm91dGUgb25lIGludGVycnVwdCBmb3IgdXMgKi8KLQkJaWYgKG5leHRfaXJxX2luZGV4ID4gMykgewotCQkJcmV0dXJuOwotCQl9Ci0JCWlmIChwY2lfc2M1MjBfc2V0X2lycShwaW4sIGlycV9saXN0W25leHRfaXJxX2luZGV4XSkpIHsKLQkJCXJldHVybjsKLQkJfQotCQluZXh0X2lycV9pbmRleCsrOwotCX0KLQotCi0JaWYgKC0xICE9IHNjNTIwX3BjaV9pbnRzW3Bpbl0pIHsKLQkJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX2J5dGUoaG9zZSwgZGV2LCBQQ0lfSU5URVJSVVBUX0xJTkUsCi0JCQkJCSAgIHNjNTIwX3BjaV9pbnRzW3Bpbl0pOwotCX0KLSNpZiAwCi0JcHJpbnRmKCJmaXh1cF9pcnE6IGRldmljZSAlZCBwaW4gJWMgaXJxICVkXG4iLAotCSAgICAgICBQQ0lfREVWKGRldiksICdBJyArIHBpbiwgc2M1MjBfcGNpX2ludHNbcGluXSk7Ci0jZW5kaWYKLX0KLQotCi1zdGF0aWMgdm9pZCBwY2lfc2M1MjBfc3B1bmtfY29uZmlndXJlX2NhcmRidXMoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLAotCQkJCQkgICAgICBwY2lfZGV2X3QgZGV2LCBzdHJ1Y3QgcGNpX2NvbmZpZ190YWJsZSAqdGUpCi17Ci0JdTMyIGlvX2Jhc2U7Ci0JdTMyIHRlbXA7Ci0KLQlwY2lhdXRvX2NvbmZpZ19kZXZpY2UoaG9zZSwgZGV2KTsKLQotCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ193b3JkKGhvc2UsIGRldiwgUENJX0NPTU1BTkQsIDB4MDcpOyAgLyogZW5hYmxlIGRldmljZSAqLwotCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ19ieXRlKGhvc2UsIGRldiwgMHgwYywgMHgxMCk7ICAgICAgICAgLyogY2FjaGVsaW5lIHNpemUgKi8KLQlwY2lfaG9zZV93cml0ZV9jb25maWdfYnl0ZShob3NlLCBkZXYsIDB4MGQsIDB4NDApOyAgICAgICAgIC8qIGxhdGVuY3kgdGltZXIgKi8KLQlwY2lfaG9zZV93cml0ZV9jb25maWdfYnl0ZShob3NlLCBkZXYsIDB4MWIsIDB4NDApOyAgICAgICAgIC8qIGNhcmRidXMgbGF0ZW5jeSB0aW1lciAqLwotCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ193b3JkKGhvc2UsIGRldiwgUENJX0JSSURHRV9DT05UUk9MLCAweDAwNDApOyAgLyogcmVzZXQgY2FyZGJ1cyAqLwotCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ193b3JkKGhvc2UsIGRldiwgUENJX0JSSURHRV9DT05UUk9MLCAweDAwODApOyAgLyogcm91dGUgaW50ZXJydXB0cyB0aG91Z2ggRXhDQSAqLwotCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ193b3JkKGhvc2UsIGRldiwgIDB4NDQsIDB4M2UwKTsgLyogbWFwIGxlZ2FjeSBJL08gcG9ydCB0byAweDNlMCAqLwotCi0JcGNpX2hvc2VfcmVhZF9jb25maWdfZHdvcmQoaG9zZSwgZGV2LCAgMHg4MCwgJnRlbXApOyAvKiBTeXN0ZW0gY29udHJvbCAqLwotCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ19kd29yZChob3NlLCBkZXYsICAweDgwLCB0ZW1wIHwgMHg2MCk7IC8qIFN5c3RlbSBjb250cm9sOiBkaXNhYmxlIGNsb2NrcnVuICovCi0JLyogcm91dGUgTUYwIHRvIH5JTlQgYW5kIE1GMyB0byBJUlE3Ci0JICogcmVzZXJ2ZSBhbGwgb3RoZXJzICovCi0JcGNpX2hvc2Vfd3JpdGVfY29uZmlnX2R3b3JkKGhvc2UsIGRldiwgMHg4YywgMHgwMDAwNzAwMik7Ci0JcGNpX2hvc2Vfd3JpdGVfY29uZmlnX2J5dGUoaG9zZSwgZGV2LCAweDkxLCAweDAwKTsgICAgLyogY2FyZCBjb250cm9sICovCi0JcGNpX2hvc2Vfd3JpdGVfY29uZmlnX2J5dGUoaG9zZSwgZGV2LCAweDkyLCAweDYyKTsgICAgLyogZGV2aWNlIGNvbnRyb2wgKi8KLQotCWlmICh0ZS0+ZGV2aWNlICE9IDB4YWM1NikgewotCQlwY2lfaG9zZV93cml0ZV9jb25maWdfYnl0ZShob3NlLCBkZXYsIDB4OTMsIDB4MjEpOyAgICAvKiBhc3luYyBpbnRlcnJ1cHQgZW5hYmxlICovCi0JCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ193b3JkKGhvc2UsIGRldiwgMHhhOCwgMHgwMDAwKTsgIC8qIHJlc2V0IEdQSU8gKi8KLQkJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX3dvcmQoaG9zZSwgZGV2LCAweGFjLCAweDAwMDApOyAgLyogcmVzZXQgR1BJTyAqLwotCQlwY2lfaG9zZV93cml0ZV9jb25maWdfd29yZChob3NlLCBkZXYsIDB4YWEsIDB4MDAwMCk7ICAvKiByZXNldCBHUElPICovCi0JCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ193b3JkKGhvc2UsIGRldiwgMHhhZSwgMHgwMDAwKTsgIC8qIHJlc2V0IEdQSU8gKi8KLQl9IGVsc2UgewotCQlwY2lfaG9zZV93cml0ZV9jb25maWdfYnl0ZShob3NlLCBkZXYsIDB4OTMsIDB4MjApOyAgICAvKiAgKi8KLQl9Ci0JcGNpX2hvc2Vfd3JpdGVfY29uZmlnX3dvcmQoaG9zZSwgZGV2LCAweGE0LCAweDgwMDApOyAgLyogcmVzZXQgcG93ZXIgbWFuYWdlbWVudCAqLwotCi0KLQlwY2lfaG9zZV9yZWFkX2NvbmZpZ19kd29yZChob3NlLCBkZXYsIFBDSV9CQVNFX0FERFJFU1NfMCwgJmlvX2Jhc2UpOwotCWlvX2Jhc2UgJj0gfjB4Zkw7Ci0KLQl3cml0ZWIoMHgwNywgaW9fYmFzZSsweDgwMyk7IC8qIHJvdXRlIENTQyBpcnEgdGhvdWdoIEV4Q0EgYW5kIGVuYWJsZSBJUlE3ICovCi0Jd3JpdGVsKDAsIGlvX2Jhc2UrMHgxMCk7ICAgICAvKiBDTEtSVU4gZGVmYXVsdCAqLwotCXdyaXRlbCgwLCBpb19iYXNlKzB4MjApOyAgICAgLyogQ0xLUlVOIGRlZmF1bHQgKi8KLQotfQotCi0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2NvbmZpZ190YWJsZSBwY2lfc2M1MjBfc3B1bmtfY29uZmlnX3RhYmxlW10gPSB7Ci0JeyAweDEwNGMsIDB4YWM1MCwgUENJX0FOWV9JRCwgMCwgMHgwYSwgMCwgcGNpX3NjNTIwX3NwdW5rX2NvbmZpZ3VyZV9jYXJkYnVzLCB7IDAsIDAsIDB9IH0sCi0JeyAweDEwNGMsIDB4YWM1NiwgUENJX0FOWV9JRCwgMCwgMHgwYSwgMCwgcGNpX3NjNTIwX3NwdW5rX2NvbmZpZ3VyZV9jYXJkYnVzLCB7IDAsIDAsIDB9IH0sCi0JeyAwLCAwLCAwLCAwLCAwLCAwLCBOVUxMLCB7MCwwLDB9fQotfTsKLQotc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBzYzUyMF9zcHVua19ob3NlID0gewotCWZpeHVwX2lycTogcGNpX3NjNTIwX3NwdW5rX2ZpeHVwX2lycSwKLQljb25maWdfdGFibGU6IHBjaV9zYzUyMF9zcHVua19jb25maWdfdGFibGUsCi0JZmlyc3RfYnVzbm86IDB4MDAsCi0JbGFzdF9idXNubzogMHhmZiwKLX07Ci0KLXZvaWQgcGNpX2luaXRfYm9hcmQodm9pZCkKLXsKLQlwY2lfc2M1MjBfaW5pdCgmc2M1MjBfc3B1bmtfaG9zZSk7Ci19Ci0KLQogLyogc2V0IHVwIHRoZSBJU0EgYnVzIHRpbWluZyBhbmQgc3lzdGVtIGFkZHJlc3MgbWFwcGluZ3MgKi8KIHN0YXRpYyB2b2lkIGJ1c19pbml0KHZvaWQpCiB7CkBAIC0zMzQsMTUxICsxODEsNiBAQAogICovCiAKIC8qCi0gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBtYXAgYSBjaHVuayBvZiBzaXplIGJ5dGVzCi0gKiBvZiB0aGUgc3lzdGVtIGFkZHJlc3Mgc3BhY2UgdG8gdGhlIElTQSBidXMKLSAqCi0gKiBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIG1lbW9yeSBhZGRyZXNzCi0gKiBhcyBzZWVuIGJ5IHRoZSBob3N0ICh3aGljaCBtYXkgdmVyeSB3aWxsIGJlIHRoZQotICogc2FtZSBhcyB0aGUgYnVzIGFkZHJlc3MpCi0gKi8KLXUzMiBpc2FfbWFwX3JvbSh1MzIgYnVzX2FkZHIsIGludCBzaXplKQotewotCXUzMiBwYXI7Ci0KLQlwcmludGYoImlzYV9tYXBfcm9tIGFza2VkIHRvIG1hcCAlZCBieXRlcyBhdCAleFxuIiwKLQkgICAgICAgc2l6ZSwgYnVzX2FkZHIpOwotCi0JcGFyID0gc2l6ZTsKLQlpZiAocGFyIDwgMHg4MDAwMCkgewotCQlwYXIgPSAweDgwMDAwOwotCX0KLQlwYXIgPj49IDEyOwotCXBhci0tOwotCXBhciY9MHg3ZjsKLQlwYXIgPDw9IDE4OwotCXBhciB8PSAoYnVzX2FkZHI+PjEyKTsKLQlwYXIgfD0gMHg1MDAwMDAwMDsKLQotCXByaW50ZiAoInNldHRpbmcgUEFSMTEgdG8gJXhcbiIsIHBhcik7Ci0KLQkvKiBNYXAgcm9tIDB4MTAwMDAgd2l0aCBQQVIxICovCi0Jc2M1MjBfbW1jci0+cGFyWzExXSA9IHBhcjsKLQotCXJldHVybiBidXNfYWRkcjsKLX0KLQotLyoKLSAqIHRoaXMgZnVuY3Rpb24gcmVtb3ZlZCBhbnkgbWFwcGluZyBjcmVhdGVkCi0gKiB3aXRoIHBjaV9nZXRfcm9tX3dpbmRvdygpCi0gKi8KLXZvaWQgaXNhX3VubWFwX3JvbSh1MzIgYWRkcikKLXsKLQlwcmludGYoImlzYV91bm1hcF9yb20gYXNrZWQgdG8gdW5tYXAgJXgiLCBhZGRyKTsKLQlpZiAoKGFkZHI+PjEyKSA9PSAoc2M1MjBfbW1jci0+cGFyWzExXSAmIDB4M2ZmZmYpKSB7Ci0JCXNjNTIwX21tY3ItPnBhclsxMV0gPSAwOwotCQlwcmludGYoIiBkb25lXG4iKTsKLQkJcmV0dXJuOwotCX0KLQlwcmludGYoIiBub3Qgb3Vyc1xuIik7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUENJCi0jZGVmaW5lIFBDSV9ST01fVEVNUF9TUEFDRSAweDEwMDAwCi0vKgotICogVGhpcyBmdW5jdGlvbiBzaG91bGQgbWFwIGEgY2h1bmsgb2Ygc2l6ZSBieXRlcwotICogb2YgdGhlIHN5c3RlbSBhZGRyZXNzIHNwYWNlIHRvIHRoZSBQQ0kgYnVzLAotICogc3VpdGFibGUgdG8gbWFwIFBDSSBST01TIChidXMgYWRkcmVzcyA8IDE2TSkKLSAqIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgaG9zdCBtZW1vcnkgYWRkcmVzcwotICogd2hpY2ggc2hvdWxkIGJlIGNvbnZlcnRlZCBpbnRvIGEgYnVzIGFkZHJlc3MKLSAqIGJlZm9yZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgUENJIHJvbSBhZGRyZXNzCi0gKiBkZWNvZGVyCi0gKi8KLXUzMiBwY2lfZ2V0X3JvbV93aW5kb3coc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCBpbnQgc2l6ZSkKLXsKLQl1MzIgcGFyOwotCi0JcGFyID0gc2l6ZTsKLQlpZiAocGFyIDwgMHg4MDAwMCkgewotCQlwYXIgPSAweDgwMDAwOwotCX0KLQlwYXIgPj49IDE2OwotCXBhci0tOwotCXBhciY9MHg3ZmY7Ci0JcGFyIDw8PSAxNDsKLQlwYXIgfD0gKFBDSV9ST01fVEVNUF9TUEFDRT4+MTYpOwotCXBhciB8PSAweDcyMDAwMDAwOwotCi0JcHJpbnRmICgic2V0dGluZyBQQVIxIHRvICV4XG4iLCBwYXIpOwotCi0JLyogTWFwIHJvbSAweDEwMDAwIHdpdGggUEFSMSAqLwotCXNjNTIwX21tY3ItPnBhclsxXSA9IHBhcjsKLQotCXJldHVybiBQQ0lfUk9NX1RFTVBfU1BBQ0U7Ci19Ci0KLS8qCi0gKiB0aGlzIGZ1bmN0aW9uIHJlbW92ZWQgYW55IG1hcHBpbmcgY3JlYXRlZAotICogd2l0aCBwY2lfZ2V0X3JvbV93aW5kb3coKQotICovCi12b2lkIHBjaV9yZW1vdmVfcm9tX3dpbmRvdyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIHUzMiBhZGRyKQotewotCXByaW50ZigicGNpX3JlbW92ZV9yb21fd2luZG93OiAleCIsIGFkZHIpOwotCWlmIChhZGRyID09IFBDSV9ST01fVEVNUF9TUEFDRSkgewotCQlzYzUyMF9tbWNyLT5wYXJbMV0gPSAwOwotCQlwcmludGYoIiBkb25lXG4iKTsKLQkJcmV0dXJuOwotCX0KLQlwcmludGYoIiBub3Qgb3Vyc1xuIik7Ci0KLX0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIG9yZGVyIHRvIHByb3ZpZGUgYWNjZXMgdG8gdGhlCi0gKiBsZWdhY3kgdmlkZW8gSS9PIHBvcnRzIG9uIHRoZSBQQ0kgYnVzLgotICogQWZ0ZXIgdGhpcyBmdW5jdGlvbiBhY2Nlc3NlcyB0byBJL08gcG9ydHMgMHgzYjAtMHgzYmIgYW5kCi0gKiAweDNjMC0weDNkZiBzaHVsZCByZXN1bHQgaW4gdHJhbnNhY3Rpb25zIG9uIHRoZSBQQ0kgYnVzLgotICoKLSAqLwotaW50IHBjaV9lbmFibGVfbGVnYWN5X3ZpZGVvX3BvcnRzKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKLXsKLQkvKiBNYXAgdmlkZW8gbWVtb3J5IHRvIDB4YTAwMDAqLwotCXNjNTIwX21tY3ItPnBhclswXSA9IDB4NzIwMDQwMGE7Ci0KLQkvKiBmb3J3YXJkIGFsbCBJL08gYWNjZXNzZXMgdG8gUENJICovCi0Jc2M1MjBfbW1jci0+YWRkZGVjY3RsID0gc2M1MjBfbW1jci0+YWRkZGVjY3RsIHwgSU9fSE9MRV9ERVNUX1BDSTsKLQotCi0JLyogc28gd2UgbWFwIGF3YXkgYWxsIGlvIHBvcnRzIHRvIHBjaSAob25seSB3YXkgdG8gYWNjZXNzIHBjaSBpbwotCSAqIGJlbG93IDB4NDAwLiBCdXQgdGhlbiB3ZSBoYXZlIHRvIG1hcCBiYWNrIHRoZSBwb3J0aW9ucyB0aGF0IHdlIGRvbnQKLQkgKiB1c2Ugc28gdGhhdCB0aGUgZ2VuZXJhdGUgY3ljbGVzIG9uIHRoZSBHUElPIGJ1cyB3aGVyZSB0aGUgc2lvIGFuZAotCSAqIElTQSBzbG90cyBhcmUgY29ubmVjdGVkLCB0aGlzIHJlcXVyZSB0aGUgdXNlIG9mIHNldmVyYWwgUEFSIHJlZ2lzdGVycwotCSAqLwotCi0JLyogYnJpbmcgMHgxMDAgLSAweDJmNyBiYWNrIHRvIElTQSB1c2luZyBQQVI1ICovCi0Jc2M1MjBfbW1jci0+cGFyWzVdID0gMHgzMWY3MDEwMDsKLQotCS8qIGNvbTIgdXNlIDJmOC0yZmYgKi8KLQotCS8qIGJyaW5nIDB4MzAwIC0gMHgzYWYgYmFjayB0byBJU0EgdXNpbmcgUEFSNyAqLwotCXNjNTIwX21tY3ItPnBhcls3XSA9IDB4MzBhZjAzMDA7Ci0KLQkvKiB2Z2EgdXNlIDNiMC0zYmIgKi8KLQotCS8qIGJyaW5nIDB4M2JjIC0gMHgzYmYgYmFjayB0byBJU0EgdXNpbmcgUEFSOCAqLwotCXNjNTIwX21tY3ItPnBhcls4XSA9IDB4MzAwMzAzYmM7Ci0KLQkvKiB2Z2EgdXNlIDNjMC0zZGYgKi8KLQotCS8qIGJyaW5nIDB4M2UwIC0gMHgzZjcgYmFjayB0byBJU0EgdXNpbmcgUEFSOSAqLwotCXNjNTIwX21tY3ItPnBhcls5XSA9IDB4MzAxNzAzZTA7Ci0KLQkvKiBjb20xIHVzZSAzZjgtM2ZmICovCi0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0vKgogICogTWlzY2VsYW5lb3VzIHBsYXRmb3JtIGRlcGVuZGVudCBpbml0aWFsaXNhdGlvbnMKICAqLwogCmRpZmYgLS1naXQgYS9ib2FyZC9zYzUyMF9zcHVuay9zYzUyMF9zcHVua19wY2kuYyBiL2JvYXJkL3NjNTIwX3NwdW5rL3NjNTIwX3NwdW5rX3BjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNWQwZjEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9zYzUyMF9zcHVuay9zYzUyMF9zcHVua19wY2kuYwpAQCAtMCwwICsxLDMyMyBAQAorLyoKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCIDxkYW5pZWxAb21pY3Jvbi5zZT4uCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPHBjaS5oPgorI2luY2x1ZGUgPGRzMTcyMi5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9wY2kuaD4KKyNpbmNsdWRlIDxhc20vaWMvc2M1MjAuaD4KKyNpbmNsdWRlIDxhc20vaWMvcGNpLmg+CisKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCitzdGF0aWMgdm9pZCBwY2lfc2M1MjBfc3B1bmtfZml4dXBfaXJxKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgcGNpX2Rldl90IGRldikKK3sKKwlpbnQgdmVyc2lvbiA9IHNjNTIwX21tY3ItPnN5c2luZm87CisKKwkvKiBhIGNvbmZpZ3VyYWJsZSBsaXN0cyBvZiBpcnFzIHRvIHN0ZWFsCisJICogd2hlbiB3ZSBuZWVkIG9uZSAoYSBib2FyZCB3aXRoIG1vcmUgcGNpIGludGVycnVwdCBwaW5zCisJICogd291bGQgdXNlIGEgbGFyZ2VyIHRhYmxlICovCisJc3RhdGljIGludCBpcnFfbGlzdFtdID0geworCQlDT05GSUdfU1lTX0ZJUlNUX1BDSV9JUlEsCisJCUNPTkZJR19TWVNfU0VDT05EX1BDSV9JUlEsCisJCUNPTkZJR19TWVNfVEhJUkRfUENJX0lSUSwKKwkJQ09ORklHX1NZU19GT1JUSF9QQ0lfSVJRCisJfTsKKwlzdGF0aWMgaW50IG5leHRfaXJxX2luZGV4PTA7CisKKwl1Y2hhciB0bXBfcGluOworCWludCBwaW47CisKKwlwY2lfaG9zZV9yZWFkX2NvbmZpZ19ieXRlKGhvc2UsIGRldiwgUENJX0lOVEVSUlVQVF9QSU4sICZ0bXBfcGluKTsKKwlwaW4gPSB0bXBfcGluOworCisJcGluLT0xOyAvKiBwY2kgY29uZmlnIHNwYWNlIHVzZSAxLWJhc2VkIG51bWJlcmluZyAqLworCWlmICgtMSA9PSBwaW4pIHsKKwkJcmV0dXJuOyAvKiBkZXZpY2UgdXNlIG5vIGlycSAqLworCX0KKworCisJLyogbWFwIGRldmljZSBudW1iZXIgKyAgcGluIHRvIGEgcGluIG9uIHRoZSBzYzUyMCAqLworCXN3aXRjaCAoUENJX0RFVihkZXYpKSB7CisJY2FzZSA2OiAgLyogRVRIMCAqLworCQlwaW4rPVNDNTIwX1BDSV9JTlRBOworCQlicmVhazsKKworCWNhc2UgNzogIC8qIEVUSDEgKi8KKwkJcGluKz1TQzUyMF9QQ0lfSU5UQjsKKwkJYnJlYWs7CisKKwljYXNlIDg6ICAvKiBDcnlwdG8gKi8KKwkJcGluKz1TQzUyMF9QQ0lfSU5UQzsKKwkJYnJlYWs7CisKKwljYXNlIDk6IC8qIFBNQyBzbG90ICovCisJCXBpbis9U0M1MjBfUENJX0lOVEQ7CisJCWJyZWFrOworCisJY2FzZSAxMDogLyogUEMtQ2FyZCAqLworCisJCWlmICh2ZXJzaW9uIDwgMTApIHsKKwkJCXBpbis9U0M1MjBfUENJX0lOVEQ7CisJCX0gZWxzZSB7CisJCQlwaW4rPVNDNTIwX1BDSV9JTlRDOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCXBpbiY9MzsgLyogd3JhcCBhcm91bmQgKi8KKworCWlmIChzYzUyMF9wY2lfaW50c1twaW5dID09IC0xKSB7CisJCS8qIHJlLXJvdXRlIG9uZSBpbnRlcnJ1cHQgZm9yIHVzICovCisJCWlmIChuZXh0X2lycV9pbmRleCA+IDMpIHsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAocGNpX3NjNTIwX3NldF9pcnEocGluLCBpcnFfbGlzdFtuZXh0X2lycV9pbmRleF0pKSB7CisJCQlyZXR1cm47CisJCX0KKwkJbmV4dF9pcnFfaW5kZXgrKzsKKwl9CisKKworCWlmICgtMSAhPSBzYzUyMF9wY2lfaW50c1twaW5dKSB7CisJCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ19ieXRlKGhvc2UsIGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLAorCQkJCQkgICBzYzUyMF9wY2lfaW50c1twaW5dKTsKKwl9CisjaWYgMAorCXByaW50ZigiZml4dXBfaXJxOiBkZXZpY2UgJWQgcGluICVjIGlycSAlZFxuIiwKKwkgICAgICAgUENJX0RFVihkZXYpLCAnQScgKyBwaW4sIHNjNTIwX3BjaV9pbnRzW3Bpbl0pOworI2VuZGlmCit9CisKKworc3RhdGljIHZvaWQgcGNpX3NjNTIwX3NwdW5rX2NvbmZpZ3VyZV9jYXJkYnVzKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwKKwkJCQkJICAgICAgcGNpX2Rldl90IGRldiwgc3RydWN0IHBjaV9jb25maWdfdGFibGUgKnRlKQoreworCXUzMiBpb19iYXNlOworCXUzMiB0ZW1wOworCisJcGNpYXV0b19jb25maWdfZGV2aWNlKGhvc2UsIGRldik7CisKKwlwY2lfaG9zZV93cml0ZV9jb25maWdfd29yZChob3NlLCBkZXYsIFBDSV9DT01NQU5ELCAweDA3KTsgIC8qIGVuYWJsZSBkZXZpY2UgKi8KKwlwY2lfaG9zZV93cml0ZV9jb25maWdfYnl0ZShob3NlLCBkZXYsIDB4MGMsIDB4MTApOyAgICAgICAgIC8qIGNhY2hlbGluZSBzaXplICovCisJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX2J5dGUoaG9zZSwgZGV2LCAweDBkLCAweDQwKTsgICAgICAgICAvKiBsYXRlbmN5IHRpbWVyICovCisJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX2J5dGUoaG9zZSwgZGV2LCAweDFiLCAweDQwKTsgICAgICAgICAvKiBjYXJkYnVzIGxhdGVuY3kgdGltZXIgKi8KKwlwY2lfaG9zZV93cml0ZV9jb25maWdfd29yZChob3NlLCBkZXYsIFBDSV9CUklER0VfQ09OVFJPTCwgMHgwMDQwKTsgIC8qIHJlc2V0IGNhcmRidXMgKi8KKwlwY2lfaG9zZV93cml0ZV9jb25maWdfd29yZChob3NlLCBkZXYsIFBDSV9CUklER0VfQ09OVFJPTCwgMHgwMDgwKTsgIC8qIHJvdXRlIGludGVycnVwdHMgdGhvdWdoIEV4Q0EgKi8KKwlwY2lfaG9zZV93cml0ZV9jb25maWdfd29yZChob3NlLCBkZXYsICAweDQ0LCAweDNlMCk7IC8qIG1hcCBsZWdhY3kgSS9PIHBvcnQgdG8gMHgzZTAgKi8KKworCXBjaV9ob3NlX3JlYWRfY29uZmlnX2R3b3JkKGhvc2UsIGRldiwgIDB4ODAsICZ0ZW1wKTsgLyogU3lzdGVtIGNvbnRyb2wgKi8KKwlwY2lfaG9zZV93cml0ZV9jb25maWdfZHdvcmQoaG9zZSwgZGV2LCAgMHg4MCwgdGVtcCB8IDB4NjApOyAvKiBTeXN0ZW0gY29udHJvbDogZGlzYWJsZSBjbG9ja3J1biAqLworCS8qIHJvdXRlIE1GMCB0byB+SU5UIGFuZCBNRjMgdG8gSVJRNworCSAqIHJlc2VydmUgYWxsIG90aGVycyAqLworCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ19kd29yZChob3NlLCBkZXYsIDB4OGMsIDB4MDAwMDcwMDIpOworCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ19ieXRlKGhvc2UsIGRldiwgMHg5MSwgMHgwMCk7ICAgIC8qIGNhcmQgY29udHJvbCAqLworCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ19ieXRlKGhvc2UsIGRldiwgMHg5MiwgMHg2Mik7ICAgIC8qIGRldmljZSBjb250cm9sICovCisKKwlpZiAodGUtPmRldmljZSAhPSAweGFjNTYpIHsKKwkJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX2J5dGUoaG9zZSwgZGV2LCAweDkzLCAweDIxKTsgICAgLyogYXN5bmMgaW50ZXJydXB0IGVuYWJsZSAqLworCQlwY2lfaG9zZV93cml0ZV9jb25maWdfd29yZChob3NlLCBkZXYsIDB4YTgsIDB4MDAwMCk7ICAvKiByZXNldCBHUElPICovCisJCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ193b3JkKGhvc2UsIGRldiwgMHhhYywgMHgwMDAwKTsgIC8qIHJlc2V0IEdQSU8gKi8KKwkJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX3dvcmQoaG9zZSwgZGV2LCAweGFhLCAweDAwMDApOyAgLyogcmVzZXQgR1BJTyAqLworCQlwY2lfaG9zZV93cml0ZV9jb25maWdfd29yZChob3NlLCBkZXYsIDB4YWUsIDB4MDAwMCk7ICAvKiByZXNldCBHUElPICovCisJfSBlbHNlIHsKKwkJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX2J5dGUoaG9zZSwgZGV2LCAweDkzLCAweDIwKTsgICAgLyogICovCisJfQorCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ193b3JkKGhvc2UsIGRldiwgMHhhNCwgMHg4MDAwKTsgIC8qIHJlc2V0IHBvd2VyIG1hbmFnZW1lbnQgKi8KKworCisJcGNpX2hvc2VfcmVhZF9jb25maWdfZHdvcmQoaG9zZSwgZGV2LCBQQ0lfQkFTRV9BRERSRVNTXzAsICZpb19iYXNlKTsKKwlpb19iYXNlICY9IH4weGZMOworCisJd3JpdGViKDB4MDcsIGlvX2Jhc2UrMHg4MDMpOyAvKiByb3V0ZSBDU0MgaXJxIHRob3VnaCBFeENBIGFuZCBlbmFibGUgSVJRNyAqLworCXdyaXRlbCgwLCBpb19iYXNlKzB4MTApOyAgICAgLyogQ0xLUlVOIGRlZmF1bHQgKi8KKwl3cml0ZWwoMCwgaW9fYmFzZSsweDIwKTsgICAgIC8qIENMS1JVTiBkZWZhdWx0ICovCisKK30KKworCitzdGF0aWMgc3RydWN0IHBjaV9jb25maWdfdGFibGUgcGNpX3NjNTIwX3NwdW5rX2NvbmZpZ190YWJsZVtdID0geworCXsgMHgxMDRjLCAweGFjNTAsIFBDSV9BTllfSUQsIDAsIDB4MGEsIDAsIHBjaV9zYzUyMF9zcHVua19jb25maWd1cmVfY2FyZGJ1cywgeyAwLCAwLCAwfSB9LAorCXsgMHgxMDRjLCAweGFjNTYsIFBDSV9BTllfSUQsIDAsIDB4MGEsIDAsIHBjaV9zYzUyMF9zcHVua19jb25maWd1cmVfY2FyZGJ1cywgeyAwLCAwLCAwfSB9LAorCXsgMCwgMCwgMCwgMCwgMCwgMCwgTlVMTCwgezAsMCwwfX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgc2M1MjBfc3B1bmtfaG9zZSA9IHsKKwlmaXh1cF9pcnE6IHBjaV9zYzUyMF9zcHVua19maXh1cF9pcnEsCisJY29uZmlnX3RhYmxlOiBwY2lfc2M1MjBfc3B1bmtfY29uZmlnX3RhYmxlLAorCWZpcnN0X2J1c25vOiAweDAwLAorCWxhc3RfYnVzbm86IDB4ZmYsCit9OworCit2b2lkIHBjaV9pbml0X2JvYXJkKHZvaWQpCit7CisJcGNpX3NjNTIwX2luaXQoJnNjNTIwX3NwdW5rX2hvc2UpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgbWFwIGEgY2h1bmsgb2Ygc2l6ZSBieXRlcworICogb2YgdGhlIHN5c3RlbSBhZGRyZXNzIHNwYWNlIHRvIHRoZSBJU0EgYnVzCisgKgorICogVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBtZW1vcnkgYWRkcmVzcworICogYXMgc2VlbiBieSB0aGUgaG9zdCAod2hpY2ggbWF5IHZlcnkgd2lsbCBiZSB0aGUKKyAqIHNhbWUgYXMgdGhlIGJ1cyBhZGRyZXNzKQorICovCit1MzIgaXNhX21hcF9yb20odTMyIGJ1c19hZGRyLCBpbnQgc2l6ZSkKK3sKKwl1MzIgcGFyOworCisJcHJpbnRmKCJpc2FfbWFwX3JvbSBhc2tlZCB0byBtYXAgJWQgYnl0ZXMgYXQgJXhcbiIsCisJICAgICAgIHNpemUsIGJ1c19hZGRyKTsKKworCXBhciA9IHNpemU7CisJaWYgKHBhciA8IDB4ODAwMDApIHsKKwkJcGFyID0gMHg4MDAwMDsKKwl9CisJcGFyID4+PSAxMjsKKwlwYXItLTsKKwlwYXImPTB4N2Y7CisJcGFyIDw8PSAxODsKKwlwYXIgfD0gKGJ1c19hZGRyPj4xMik7CisJcGFyIHw9IDB4NTAwMDAwMDA7CisKKwlwcmludGYgKCJzZXR0aW5nIFBBUjExIHRvICV4XG4iLCBwYXIpOworCisJLyogTWFwIHJvbSAweDEwMDAwIHdpdGggUEFSMSAqLworCXNjNTIwX21tY3ItPnBhclsxMV0gPSBwYXI7CisKKwlyZXR1cm4gYnVzX2FkZHI7Cit9CisKKy8qCisgKiB0aGlzIGZ1bmN0aW9uIHJlbW92ZWQgYW55IG1hcHBpbmcgY3JlYXRlZAorICogd2l0aCBwY2lfZ2V0X3JvbV93aW5kb3coKQorICovCit2b2lkIGlzYV91bm1hcF9yb20odTMyIGFkZHIpCit7CisJcHJpbnRmKCJpc2FfdW5tYXBfcm9tIGFza2VkIHRvIHVubWFwICV4IiwgYWRkcik7CisJaWYgKChhZGRyPj4xMikgPT0gKHNjNTIwX21tY3ItPnBhclsxMV0gJiAweDNmZmZmKSkgeworCQlzYzUyMF9tbWNyLT5wYXJbMTFdID0gMDsKKwkJcHJpbnRmKCIgZG9uZVxuIik7CisJCXJldHVybjsKKwl9CisJcHJpbnRmKCIgbm90IG91cnNcbiIpOworfQorCisjZGVmaW5lIFBDSV9ST01fVEVNUF9TUEFDRSAweDEwMDAwCisvKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgbWFwIGEgY2h1bmsgb2Ygc2l6ZSBieXRlcworICogb2YgdGhlIHN5c3RlbSBhZGRyZXNzIHNwYWNlIHRvIHRoZSBQQ0kgYnVzLAorICogc3VpdGFibGUgdG8gbWFwIFBDSSBST01TIChidXMgYWRkcmVzcyA8IDE2TSkKKyAqIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgaG9zdCBtZW1vcnkgYWRkcmVzcworICogd2hpY2ggc2hvdWxkIGJlIGNvbnZlcnRlZCBpbnRvIGEgYnVzIGFkZHJlc3MKKyAqIGJlZm9yZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgUENJIHJvbSBhZGRyZXNzCisgKiBkZWNvZGVyCisgKi8KK3UzMiBwY2lfZ2V0X3JvbV93aW5kb3coc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCBpbnQgc2l6ZSkKK3sKKwl1MzIgcGFyOworCisJcGFyID0gc2l6ZTsKKwlpZiAocGFyIDwgMHg4MDAwMCkgeworCQlwYXIgPSAweDgwMDAwOworCX0KKwlwYXIgPj49IDE2OworCXBhci0tOworCXBhciY9MHg3ZmY7CisJcGFyIDw8PSAxNDsKKwlwYXIgfD0gKFBDSV9ST01fVEVNUF9TUEFDRT4+MTYpOworCXBhciB8PSAweDcyMDAwMDAwOworCisJcHJpbnRmICgic2V0dGluZyBQQVIxIHRvICV4XG4iLCBwYXIpOworCisJLyogTWFwIHJvbSAweDEwMDAwIHdpdGggUEFSMSAqLworCXNjNTIwX21tY3ItPnBhclsxXSA9IHBhcjsKKworCXJldHVybiBQQ0lfUk9NX1RFTVBfU1BBQ0U7Cit9CisKKy8qCisgKiB0aGlzIGZ1bmN0aW9uIHJlbW92ZWQgYW55IG1hcHBpbmcgY3JlYXRlZAorICogd2l0aCBwY2lfZ2V0X3JvbV93aW5kb3coKQorICovCit2b2lkIHBjaV9yZW1vdmVfcm9tX3dpbmRvdyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIHUzMiBhZGRyKQoreworCXByaW50ZigicGNpX3JlbW92ZV9yb21fd2luZG93OiAleCIsIGFkZHIpOworCWlmIChhZGRyID09IFBDSV9ST01fVEVNUF9TUEFDRSkgeworCQlzYzUyMF9tbWNyLT5wYXJbMV0gPSAwOworCQlwcmludGYoIiBkb25lXG4iKTsKKwkJcmV0dXJuOworCX0KKwlwcmludGYoIiBub3Qgb3Vyc1xuIik7CisKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIG9yZGVyIHRvIHByb3ZpZGUgYWNjZXMgdG8gdGhlCisgKiBsZWdhY3kgdmlkZW8gSS9PIHBvcnRzIG9uIHRoZSBQQ0kgYnVzLgorICogQWZ0ZXIgdGhpcyBmdW5jdGlvbiBhY2Nlc3NlcyB0byBJL08gcG9ydHMgMHgzYjAtMHgzYmIgYW5kCisgKiAweDNjMC0weDNkZiBzaHVsZCByZXN1bHQgaW4gdHJhbnNhY3Rpb25zIG9uIHRoZSBQQ0kgYnVzLgorICoKKyAqLworaW50IHBjaV9lbmFibGVfbGVnYWN5X3ZpZGVvX3BvcnRzKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKK3sKKwkvKiBNYXAgdmlkZW8gbWVtb3J5IHRvIDB4YTAwMDAqLworCXNjNTIwX21tY3ItPnBhclswXSA9IDB4NzIwMDQwMGE7CisKKwkvKiBmb3J3YXJkIGFsbCBJL08gYWNjZXNzZXMgdG8gUENJICovCisJc2M1MjBfbW1jci0+YWRkZGVjY3RsID0gc2M1MjBfbW1jci0+YWRkZGVjY3RsIHwgSU9fSE9MRV9ERVNUX1BDSTsKKworCisJLyogc28gd2UgbWFwIGF3YXkgYWxsIGlvIHBvcnRzIHRvIHBjaSAob25seSB3YXkgdG8gYWNjZXNzIHBjaSBpbworCSAqIGJlbG93IDB4NDAwLiBCdXQgdGhlbiB3ZSBoYXZlIHRvIG1hcCBiYWNrIHRoZSBwb3J0aW9ucyB0aGF0IHdlIGRvbnQKKwkgKiB1c2Ugc28gdGhhdCB0aGUgZ2VuZXJhdGUgY3ljbGVzIG9uIHRoZSBHUElPIGJ1cyB3aGVyZSB0aGUgc2lvIGFuZAorCSAqIElTQSBzbG90cyBhcmUgY29ubmVjdGVkLCB0aGlzIHJlcXVyZSB0aGUgdXNlIG9mIHNldmVyYWwgUEFSIHJlZ2lzdGVycworCSAqLworCisJLyogYnJpbmcgMHgxMDAgLSAweDJmNyBiYWNrIHRvIElTQSB1c2luZyBQQVI1ICovCisJc2M1MjBfbW1jci0+cGFyWzVdID0gMHgzMWY3MDEwMDsKKworCS8qIGNvbTIgdXNlIDJmOC0yZmYgKi8KKworCS8qIGJyaW5nIDB4MzAwIC0gMHgzYWYgYmFjayB0byBJU0EgdXNpbmcgUEFSNyAqLworCXNjNTIwX21tY3ItPnBhcls3XSA9IDB4MzBhZjAzMDA7CisKKwkvKiB2Z2EgdXNlIDNiMC0zYmIgKi8KKworCS8qIGJyaW5nIDB4M2JjIC0gMHgzYmYgYmFjayB0byBJU0EgdXNpbmcgUEFSOCAqLworCXNjNTIwX21tY3ItPnBhcls4XSA9IDB4MzAwMzAzYmM7CisKKwkvKiB2Z2EgdXNlIDNjMC0zZGYgKi8KKworCS8qIGJyaW5nIDB4M2UwIC0gMHgzZjcgYmFjayB0byBJU0EgdXNpbmcgUEFSOSAqLworCXNjNTIwX21tY3ItPnBhcls5XSA9IDB4MzAxNzAzZTA7CisKKwkvKiBjb20xIHVzZSAzZjgtM2ZmICovCisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYl9pMzg2L01ha2VmaWxlIGIvbGliX2kzODYvTWFrZWZpbGUKaW5kZXggZWM2ZjIzNi4uYmI5YjMzMCAxMDA2NDQKLS0tIGEvbGliX2kzODYvTWFrZWZpbGUKKysrIGIvbGliX2kzODYvTWFrZWZpbGUKQEAgLTMyLDggKzMyLDggQEAKIENPQkpTLXkJKz0gYmlvc19zZXR1cC5vCiBDT0JKUy15CSs9IGJvYXJkLm8KIENPQkpTLXkJKz0gYm9vdG0ubwotQ09CSlMteQkrPSBwY2kubwotQ09CSlMteQkrPSBwY2lfdHlwZTEubworQ09CSlMtJChDT05GSUdfUENJKSArPSBwY2kubworQ09CSlMtJChDT05GSUdfUENJKSArPSBwY2lfdHlwZTEubwogQ09CSlMteQkrPSByZWFsbW9kZS5vCiBDT0JKUy15CSs9IHZpZGVvX2Jpb3MubwogQ09CSlMteQkrPSB2aWRlby5vCmRpZmYgLS1naXQgYS9saWJfaTM4Ni9wY2kuYyBiL2xpYl9pMzg2L3BjaS5jCmluZGV4IGYzNjZiZGMuLjkwMjBlN2MgMTAwNjQ0Ci0tLSBhL2xpYl9pMzg2L3BjaS5jCisrKyBiL2xpYl9pMzg2L3BjaS5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS5oPgogCi0jaWZkZWYgQ09ORklHX1BDSQogI3VuZGVmIFBDSV9ST01fU0NBTl9WRVJCT1NFCiAKIGludCBwY2lfc2hhZG93X3JvbShwY2lfZGV2X3QgZGV2LCB1bnNpZ25lZCBjaGFyICpkZXN0KQpAQCAtMTUxLDUgKzE1MCwzIEBACiAKIAlyZXR1cm4gcmVzOwogfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYl9pMzg2L3BjaV90eXBlMS5jIGIvbGliX2kzODYvcGNpX3R5cGUxLmMKaW5kZXggOGRhOGMxYy4uMjI1YWU0YSAxMDA2NDQKLS0tIGEvbGliX2kzODYvcGNpX3R5cGUxLmMKKysrIGIvbGliX2kzODYvcGNpX3R5cGUxLmMKQEAgLTExLDkgKzExLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8Y29tbW9uLmg+Ci0KLSNpZmRlZiBDT05GSUdfUENJCi0KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxwY2kuaD4KIApAQCAtNTIsNSArNDksMyBAQAogCWhvc2UtPmNmZ19hZGRyID0gKHVuc2lnbmVkIGludCAqKSBjZmdfYWRkcjsKIAlob3NlLT5jZmdfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopIGNmZ19kYXRhOwogfQotCi0jZW5kaWYK